//#include <iostream>
//#include <vector>
//#include <queue>
//
//using namespace std;
//vector< bool > used;
//
//
//vector< int > Deikstra( vector< vector< int > >* graph, int first ) {
//	vector< int > length;
//	length.resize( graph->size(), 0 );
//	vector< double > d;
//	d.resize( ( *graph ).size(), std::numeric_limits< double >::infinity() );
//	length[ first ] = 0;
//	priority_queue < pair< int, int > > q;
//	q.push( make_pair ( length[first], first ) );
//	while( !q.empty() ) {
//		int v = q.top().second;
//		int cur_d = -q.top().first;
//		q.pop();
//		if( cur_d > d[v] )  
//			continue;
//		for( size_t j = 0; j < ( *graph )[v].size(); ++j) {
//			int to = ( *graph )[v][j];
//			int len = 1;
//			if( ( length[v] + len ) < d[to] ) {
//				d[to] = length[v] + len;
//				length[to] = d[to];
//				q.push( make_pair( -d[to], to ) );
//			}
//		}
//	}
//	return length;
//};
//
//int main() {
//	int n;
//	freopen( "1.txt", "r", stdin );
//    cin >> n;
//	vector< vector< int > > g;
//	g.resize( n );
//    while( true ) {
//        int x, y;
//        cin >> x >> y;
//        if( y != x ) {
//			g[x].push_back( y );
//		}
//        if( x == 0 && y == 0 )
//            break;
//    }
//	freopen( "2.txt", "w", stdout );
//	for( int i = 0; i < n; ++i ) {
//		vector< int > len = Deikstra( &g, i );
//		for( int j = 0; j < n; ++j ) {
//			if( i != j )
//				if( len[j] != 0 && len[j] != std::numeric_limits< double >::infinity() ) {
//					cout << i << " " << j << endl;
//				}
//		}
//	}
//	return 0;
//};